home *** CD-ROM | disk | FTP | other *** search
/ Light ROM 1 / LIGHT-ROM 1 (Amiga Library Services)(1994).iso / ffdisks / d886.lha / PatchLibrary / ShowNeededFiles.asm < prev   
Assembly Source File  |  1993-07-16  |  7KB  |  344 lines

  1. ;ShowNeededFiles V1.0
  2. ;(C) 1993 Stefan Fuchs
  3.  
  4.  
  5.     include ASMMacros.i
  6.     include dos/dosextens.i
  7.  
  8. ExecBase    =    4
  9. Wait        =    -318        ;Exec
  10. FindTask    =    -294
  11.  
  12. LoadSeg        =    -150        ;Dos
  13. Open        =    -30
  14. OutPut        =    -60
  15. Lock        =    -84
  16. IOErr        =    -132
  17.  
  18. InstallPatch    =    -30        ;Patch
  19. WaitRemovePatch    =    -36
  20.  
  21. Main:
  22.     OPENLIB DosName,0,NoDosExit        ;Open Dos Library
  23.     move.l d0,a5
  24.  
  25.     CALL OutPut,a5                ;Get Outputhandle
  26.     move.l d0,OutPutHandle
  27.     beq NoOutPutExit
  28.  
  29.     OPENLIB PatchName,0,FailedToOpenPatch    ;Open Patch Library
  30.     move.l d0,a4
  31.  
  32.  
  33. ; Install patches
  34.  
  35.     lea.l NPatchStructPreLoadSeg(pc),a0
  36.     CALL InstallPatch,a4
  37.     move.l a5,a6
  38.     lea.l PreLoadSegFailed(pc),a0
  39.     move.l d0,PreLoadSegPatch
  40.     BSREQ TextOutput
  41.  
  42.     lea.l NPatchStructPreOpen(pc),a0
  43.     CALL InstallPatch,a4
  44.     move.l a5,a6
  45.     lea.l PreOpenFailed(pc),a0
  46.     move.l d0,PreOpenPatch
  47.     BSREQ TextOutput
  48.  
  49.     lea.l NPatchStructPreLock(pc),a0
  50.     CALL InstallPatch,a4
  51.     move.l a5,a6
  52.     lea.l PreLockFailed(pc),a0
  53.     move.l d0,PreLockPatch
  54.     BSREQ TextOutput
  55.  
  56.     lea.l NPatchStructAfterLoadSeg(pc),a0
  57.     CALL InstallPatch,a4
  58.     move.l a5,a6
  59.     lea.l AfterLoadSegFailed(pc),a0
  60.     move.l d0,AfterLoadSegPatch
  61.     BSREQ TextOutput
  62.  
  63.     lea.l NPatchStructAfterOpen(pc),a0
  64.     CALL InstallPatch,a4
  65.     move.l a5,a6
  66.     lea.l AfterOpenFailed(pc),a0
  67.     move.l d0,AfterOpenPatch
  68.     BSREQ TextOutput
  69.  
  70.     lea.l NPatchStructAfterLock(pc),a0
  71.     CALL InstallPatch,a4
  72.     move.l a5,a6
  73.     lea.l AfterLockFailed(pc),a0
  74.     move.l d0,AfterLockPatch
  75.     BSREQ TextOutput
  76.  
  77.  
  78. MainLoop:                ;Wait for CTRL-C
  79.     moveq.l #0,d0
  80.     bset.l #12,d0
  81.     CALL Wait,ExecBase
  82.  
  83.  
  84. ;Patches entfernen
  85.     move.l PreLoadSegPatch,a0
  86.     CALL WaitRemovePatch,a4
  87.     move.l a5,a6
  88.     lea.l PreLoadSegRemFailed(pc),a0
  89.     tst.l d0
  90.     BSRNE TextOutput,MainLoop
  91.     move.l d0,PreLoadSegPatch
  92.  
  93.     move.l PreOpenPatch,a0
  94.     CALL WaitRemovePatch,a4
  95.     move.l a5,a6
  96.     lea.l PreOpenRemFailed(pc),a0
  97.     tst.l d0
  98.     BSRNE TextOutput,MainLoop
  99.     move.l d0,PreOpenPatch
  100.  
  101.     move.l PreLockPatch,a0
  102.     CALL WaitRemovePatch,a4
  103.     move.l a5,a6
  104.     lea.l PreLockRemFailed(pc),a0
  105.     tst.l d0
  106.     BSRNE TextOutput,MainLoop
  107.     move.l d0,PreLockPatch
  108.  
  109.     move.l AfterLoadSegPatch,a0
  110.     CALL WaitRemovePatch,a4
  111.     move.l a5,a6
  112.     lea.l AfterLoadSegRemFailed(pc),a0
  113.     tst.l d0
  114.     BSRNE TextOutput,MainLoop
  115.     move.l d0,AfterLoadSegPatch
  116.  
  117.     move.l AfterOpenPatch,a0
  118.     CALL WaitRemovePatch,a4
  119.     move.l a5,a6
  120.     lea.l AfterOpenRemFailed(pc),a0
  121.     tst.l d0
  122.     BSRNE TextOutput,MainLoop
  123.     move.l d0,AfterOpenPatch
  124.  
  125.     move.l AfterLockPatch,a0
  126.     CALL WaitRemovePatch,a4
  127.     move.l a5,a6
  128.     lea.l AfterLockRemFailed(pc),a0
  129.     tst.l d0
  130.     BSRNE TextOutput,MainLoop
  131.     move.l d0,AfterLockPatch
  132.  
  133.  
  134.     move.l a4,d1        ;Close Patch Library
  135.     CLOSELIB d1
  136.     bra CloseDosSkip
  137.  
  138. FailedToOpenPatch:
  139.     move.l a5,a6        ;No Patch Library warning
  140.     lea.l NoPatchText(pc),a0
  141.     bsr TextOutput
  142.  
  143. CloseDosSkip:
  144. NoOutPutExit:
  145.     move.l a5,d1        ;Close Dos Libray
  146.     CLOSELIB d1
  147. NoDosExit:
  148.  
  149.     rts
  150. ;----------------------------
  151. PreLoadSeg:            ;Patch routines
  152.     movem.l a0,-(sp)
  153.     lea.l LoadSegText(pc),a0
  154.     bsr TextOutput
  155.     move.l d1,a0
  156.     bsr TextOutput
  157.     move.l (sp)+,a0
  158.     rts
  159. ;------
  160. AfterLoadSeg:
  161. AfterOpen:
  162. AfterLock:
  163.     movem.l a0/d7,-(sp)
  164.     lea.l SuccessfulText(pc),a0
  165.     tst.l d0
  166.     bne.s AfterLoadsegSkip
  167.     lea.l FailedText(pc),a0
  168. AfterLoadsegSkip:
  169.     bsr GetIOErr
  170.     bsr TextOutput
  171.     lea.l ReturnText(pc),a0
  172.     bsr TextOutput
  173.     bsr SetIOErr
  174.     movem.l (sp)+,a0/d7
  175.     rts
  176. ;-------
  177. PreOpen:
  178.     move.l a0,-(sp)
  179.     lea.l OpenText(pc),a0
  180.     bsr TextOutput
  181.     move.l d1,a0
  182.     bsr TextOutput
  183.     move.l (sp)+,a0
  184.     rts
  185. ;-------
  186. PreLock:
  187.     move.l a0,-(sp)
  188.     lea.l LockText(pc),a0
  189.     bsr TextOutput
  190.     move.l d1,a0
  191.     bsr TextOutput
  192.     move.l (sp)+,a0
  193.     rts
  194. ;------------------------------------
  195. ;This routines are needed to preserve the IOErr field
  196. ;It gets destroyed, when i do a dos.library/write()
  197. GetIOErr:
  198. ;a6 = DosBase
  199. ;Result: d7 = errorcode
  200.     movem.l d0/d1/a0/a1,-(sp)
  201.     CALL IOErr
  202.     move.l d0,d7
  203.     movem.l (sp)+,d0/d1/a0/a1
  204.     rts
  205. ;--------------
  206. SetIOErr:
  207. ;I know i should have used dos.library/SetIOErr(),
  208. ;but I care for poor V33 users
  209. ;d7 = old errorcode
  210.     movem.l d0/d1/a0/a1/a6,-(sp)
  211.     sub.l a1,a1
  212.     CALL FindTask,ExecBase
  213.     move.l d0,a0
  214.     move.l d7,pr_Result2(a0)
  215.     move.l pr_CLI(a0),d0
  216.     beq SetIOExit
  217.     lsl.l #2,d0
  218.     move.l d0,a0
  219.     move.l d7,cli_Result2(a0)
  220.  
  221. SetIOExit:
  222.     movem.l (sp)+,d0/d1/a0/a1/a6
  223.     rts
  224. ;------------------------------------------------
  225. ;a0 = Pointer to a C-string
  226. ;a6 = DosBase
  227. TextOutput:
  228.     movem.l d0-d3/a0/a1,-(sp)
  229.     moveq.l #50,d0
  230.     moveq.l #0,d3
  231.     move.l a0,d2
  232.     beq.s TextOutputExit
  233. TextOutputLoop:
  234.     addq.l #1,d3
  235.     tst.b (a0)+
  236.     dbeq d0,TextOutputLoop
  237.     move.l OutPutHandle,d1
  238.     jsr -48(a6)    ;Write
  239. TextOutputExit:
  240.     movem.l (sp)+,d0-d3/a0/a1
  241.     rts
  242. ;--------------------------------------
  243. OutPutHandle:        dc.l 0
  244. PreLoadSegPatch:    dc.l 0
  245. PreOpenPatch:        dc.l 0
  246. PreLockPatch:        dc.l 0
  247. AfterLoadSegPatch:    dc.l 0
  248. AfterOpenPatch:        dc.l 0
  249. AfterLockPatch:        dc.l 0
  250.  
  251.         dc.b "SNF is copyright 1993 by Stefan Fuchs"
  252.  
  253. DosName:    dc.b "dos.library",0
  254. PatchName:    dc.b "patch.library",0
  255. NoPatchText:    dc.b "SNF requires patch.library in LIBS:",10,0
  256. PreLoadSegFailed:    dc.b "Can't install 1. LoadSeg() patch",10,0
  257. PreOpenFailed:        dc.b "Can't install 1. Open() patch",10,0
  258. PreLockFailed:        dc.b "Can't install 1. Lock() patch",10,0
  259. AfterLoadSegFailed:    dc.b "Can't install 2. LoadSeg() patch",10,0
  260. AfterOpenFailed:    dc.b "Can't install 2. Open() patch",10,0
  261. AfterLockFailed:    dc.b "Can't install 2. Lock() patch",10,0
  262. PreLoadSegRemFailed:    dc.b "Can't remove 1. LoadSeg() patch - CTRL-C to retry",10,0
  263. PreOpenRemFailed:    dc.b "Can't remove 1. Open() patch - CTRL-C to retry",10,0
  264. PreLockRemFailed:    dc.b "Can't remove 1. Lock() patch - CTRL-C to retry",10,0
  265. AfterLoadSegRemFailed:    dc.b "Can't remove 2. LoadSeg() patch - CTRL-C to retry",10,0
  266. AfterOpenRemFailed:    dc.b "Can't remove 2. Open() patch - CTRL-C to retry",10,0
  267. AfterLockRemFailed:    dc.b "Can't remove 2. Lock() patch - CTRL-C to retry",10,0
  268. ReturnText:    dc.b 10,0
  269. FailedText:    dc.b "        FAILED",0
  270. SuccessfulText:    dc.b "        OK",0
  271. LoadSegText:    dc.b "Loadseg    : ",0
  272. OpenText:    dc.b "Open       : ",0
  273. LockText:    dc.b "Lock       : ",0
  274.  
  275.     even
  276.  
  277. NPatchStructPreLoadSeg:
  278.     dc.l PreLoadSeg
  279.     dc.l 0
  280.     dc.l DosName
  281.     dc.w 0
  282.     dc.w LoadSeg
  283.     dc.w 1
  284.     dc.w 0
  285.     dc.l 0
  286.     dc.l 0
  287.  
  288. NPatchStructPreOpen:
  289.     dc.l PreOpen
  290.     dc.l 0
  291.     dc.l DosName
  292.     dc.w 0
  293.     dc.w Open
  294.     dc.w 1
  295.     dc.w 0
  296.     dc.l 0
  297.     dc.l 0
  298.  
  299. NPatchStructPreLock:
  300.     dc.l PreLock
  301.     dc.l 0
  302.     dc.l DosName
  303.     dc.w 0
  304.     dc.w Lock
  305.     dc.w 1
  306.     dc.w 0
  307.     dc.l 0
  308.     dc.l 0
  309.  
  310.  
  311. NPatchStructAfterLoadSeg:
  312.     dc.l AfterLoadSeg
  313.     dc.l 0
  314.     dc.l DosName
  315.     dc.w 0
  316.     dc.w LoadSeg
  317.     dc.w -1
  318.     dc.w 0
  319.     dc.l 0
  320.     dc.l 0
  321.  
  322. NPatchStructAfterOpen:
  323.     dc.l AfterOpen
  324.     dc.l 0
  325.     dc.l DosName
  326.     dc.w 0
  327.     dc.w Open
  328.     dc.w -1
  329.     dc.w 0
  330.     dc.l 0
  331.     dc.l 0
  332.  
  333. NPatchStructAfterLock:
  334.     dc.l AfterLock
  335.     dc.l 0
  336.     dc.l DosName
  337.     dc.w 0
  338.     dc.w Lock
  339.     dc.w -1
  340.     dc.w 0
  341.     dc.l 0
  342.     dc.l 0
  343.     END
  344.